package service

import (
	"StrayAnimals/internal/initConfig"
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
	_ "github.com/aliyun/aliyun-oss-go-sdk/oss"
	"go.uber.org/zap"
	"io"
)

func UploadFileToRemote(file io.Reader, fileName string) (string, error) {
	appConfig := initConfig.GetAppConfig()
	// 1. 初始化OSS客户端并获取Bucket
	client, err := oss.New(appConfig.Oss.Endpoint, appConfig.Oss.AccessKeyID, appConfig.Oss.AccessKeySecret)
	if err != nil {
		zap.L().Error("OSS客户端初始化失败", zap.Error(err))
		return "", err
	}
	bucketName := appConfig.Oss.BucketName
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		zap.L().Error("获取Bucket失败", zap.Error(err))
		return "", err
	}

	// 2. 上传文件到OSS
	err = bucket.PutObject(fileName, file)
	if err != nil {
		zap.L().Error("OSS上传失败", zap.Error(err))
		return "", err
	}

	// 3. 返回访问URL
	url := "https://" + bucketName + "." + appConfig.Oss.Endpoint + "/" + fileName

	return url, nil
}

//
//// UploadFileToRemote 上传文件到远程服务器
//func UploadFileToRemote(file io.Reader, fileName string) (string, error) {
//	// 创建一个缓冲区用于存储 multipart/form-data 数据
//	var requestBody bytes.Buffer
//	writer := multipart.NewWriter(&requestBody)
//
//	// 添加 API Key 到表单
//	if err := writer.WriteField("key", ApiKey); err != nil {
//		return "", fmt.Errorf("failed to write key: %w", err)
//	}
//
//	// 添加相册 ID（非必需）
//	if err := writer.WriteField("album_id", "SYyOK"); err != nil {
//		return "", fmt.Errorf("failed to write album_id: %w", err)
//	}
//
//	// 添加文件名
//	if err := writer.WriteField("title", fileName); err != nil {
//		return "", fmt.Errorf("failed to write title: %w", err)
//	}
//
//	// 添加响应格式
//	if err := writer.WriteField("format", "json"); err != nil {
//		return "", fmt.Errorf("failed to write format: %w", err)
//	}
//
//	// 添加文件到表单
//	fileWriter, err := writer.CreateFormFile("source", fileName)
//	if err != nil {
//		return "", fmt.Errorf("failed to create form file: %w", err)
//	}
//	if _, err := io.Copy(fileWriter, file); err != nil {
//		return "", fmt.Errorf("failed to copy file data: %w", err)
//	}
//
//	// 完成 multipart 写入
//	if err := writer.Close(); err != nil {
//		return "", fmt.Errorf("failed to close multipart writer: %w", err)
//	}
//
//	// 创建 HTTP 请求
//	req, err := http.NewRequest(http.MethodPost, UploadUrl, &requestBody)
//	if err != nil {
//		return "", fmt.Errorf("failed to create request: %w", err)
//	}
//
//	// 设置请求头
//	req.Header.Set("Content-Type", writer.FormDataContentType())
//
//	// 设置超时时间
//	client := &http.Client{
//		Timeout: 360 * time.Second, // 超时时间 360 秒
//	}
//
//	// 发送请求
//	resp, err := client.Do(req)
//	if err != nil {
//		return "", fmt.Errorf("failed to send request: %w", err)
//	}
//	defer func(Body io.ReadCloser) {
//		err := Body.Close()
//		if err != nil {
//			zap.L().Error("Failed to close response body", zap.Error(err))
//		}
//	}(resp.Body)
//
//	// 解析响应
//	var responseBody map[string]interface{}
//	if err := json.NewDecoder(resp.Body).Decode(&responseBody); err != nil {
//		return "", fmt.Errorf("failed to decode response: %w", err)
//	}
//
//	// 检查是否包含图片信息
//	if imageInfo, ok := responseBody["image"].(map[string]interface{}); ok {
//		if url, ok := imageInfo["url"].(string); ok {
//			return url, nil
//		}
//	}
//
//	// 检查是否包含错误信息
//	if errorInfo, ok := responseBody["error"].(map[string]interface{}); ok {
//		if message, ok := errorInfo["message"].(string); ok {
//			return "", fmt.Errorf("upload failed: %s", message)
//		}
//	}
//
//	return "", fmt.Errorf("upload failed: unknown error")
//}
